#ifndef prsTest_Frm_H
#define prsTest_Frm_H

#include "prs_FrmGeom.h"
#include "prs_FrmFont.h"
#include "prs_FrmStringStyle.h"
#include "prs_FrmString.h"
#include "prs_Form.h"

namespace prsTestFrm {

///////////////////////////////////////////////////////////////////////////////  

struct TRule : public snt::TRule
{
  snt::text::TContext &Context;
  prs::TNode      &ParentNode;
  //
  TRule(snt::text::TContext &Context_,prs::TNode &ParentNode_,snt::TRule &RTest) 
  :Context(Context_),ParentNode(ParentNode_)
  {
    snt::text::TEndOfText Eof(Context);
    snt::TReturn Return;
  
   *this
    | RTest.New() & Eof.New() & Return.New()
    ;
  }
  //
  virtual bool Execute()
  {
    if (snt::TRule::Execute())
    {
      svl::TMessageModal(svl::TString("Normal")
        << "\r\nText:\r\n"  << Context.Text().GetInfo() 
        << "\r\nNodes:\r\n" << ParentNode.GetInfoAsString()
      );
      return true;
    }
    else 
    { 
      svl::TMessageModal(svl::TString("Errors") 
        << "\r\n" << Context.GetErrorsInfo()
        << "\r\nNodes:\r\n"  << ParentNode.GetInfoAsString()
      );
    }
    return false;
  }
};

///////////////////////////////////////////////////////////////////////////////  
void TestGeometry();
void TestFont();
//
void TestFrmStringStyle();
void TestFrmString();
//
void TestMain();
void Test();

///////////////////////////////////////////////////////////////////////////////  
}

#endif

